// 从redux里导出三个方法
// creageStaore 用于创建store库、
// applyMiddleware 将promise,thunk,saga等中间件应用到我们的store中
// compose 增强我们的store库
import { createStore, applyMiddleware } from 'redux'
// 中间件，使我们的dispatch能够识别并处理action.payload中的promise方法
import promise from 'redux-promise'
// 中间件，使我们的dispatch能够识别并处理action.payload中的函数
import thunk from 'redux-thunk'
// redux开发者工具 window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
import { composeWithDevTools } from 'redux-devtools-extension'

// 我们自己写的reduce, 经过redux.combineReducers方法合并完成的reducer对象
import reducer from '@/reducer'

// 用于持久化我们的reducer的方法，它返回的也是一个reducer对象
import { persistReducer } from 'redux-persist'
// import storageSession from 'redux-persist/lib/storage/session'

import storage from 'redux-persist/lib/storage'

const rootPersistConfig = {
  key: 'root',
  storage: storage,
}

// 创建store库
export const store = createStore(
  // persistReducer方法，返回一个reducer对象
  persistReducer(rootPersistConfig, reducer),
  // 构成并增强我们的store库的方法，它接受我们使用applyMiddleware生成的函数(
  // 这个函数执行后返回一个store对象树，它里面包含有dispatch\getstate和一些其
  // 它的方法) ，总的来说，这里是createStore方法的第二个参数，它最终应该是一个store对象
  composeWithDevTools(applyMiddleware(promise, thunk))
)
// 抛出
export default store
